
pub fn convert_base(num_str: &str, to_base: u32) -> String {
    assert!(
        to_base >= 2 && to_base <= 16,
        "仅支持2-16进制转换"
    );
    // 判断num_str 的格式是否正确， 用 ( 进行分割
    let v: Vec<&str> = num_str.trim().split('(').collect();
    if v.len() != 2 || !v[1].ends_with(')') {
        panic!("输入格式无效，应为 'num(from_base)'");
    }
    
    let from_base = v[1].trim_end_matches(')').parse::<u32>().expect("进制不是数字！");
    if from_base < 2 || from_base > 16 {
        panic!("输入数字的进制必须在2-16之间");
    }
    let mut num = u32::from_str_radix(v[0], from_base).expect("数字解析错误");
    let mut ans = String::new();
    while num > 0 {
        // 记录余数
        let c = std::char::from_digit(num % to_base, to_base).unwrap();
        // 每次都插入到高位
        ans.insert(0, c);
        num /= to_base;
    }
    if ans.is_empty() {
        return "0".to_string();
    }
    ans
}
